package com.itheima.tool;

import com.alibaba.fastjson.JSON;
import com.itheima.excecption.NotLocalException;
import com.itheima.tool.BaseContext;
import com.itheima.tool.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.AntPathMatcher;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;


@WebFilter(urlPatterns = "/*" ,filterName = "doFilter")
@Slf4j
public class doFilter implements Filter {

    private static final AntPathMatcher ANT_PATH_MATCHER=new AntPathMatcher();

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

        HttpServletRequest request= (HttpServletRequest) servletRequest;
        HttpServletResponse response= (HttpServletResponse) servletResponse;

        //获取访问的ip
        String localAddr = request.getRemoteAddr();
        int remotePort = request.getRemotePort();
        System.out.println(localAddr+":"+remotePort+"正在访问");
//        A. 获取本次请求的URI

        String URI = request.getRequestURI();

//        B. 判断本次请求, 是否需要登录, 才可以访问
        String[] urls={
                "/employee/login",
                "/backend/**",
                "/employee/logout",
                "/front/**",
                "/common/upload",
                "/common/download",
                "/user/login",
                "/user/sendMsg"
        };
        System.out.println(Arrays.toString(urls));

        for (String url : urls) {
            boolean match = ANT_PATH_MATCHER.match(url,URI);
//            C. 如果不需要，则直接放行
            if (match){
                filterChain.doFilter(request, response);
                return;
            }
        }
//        D. 判断登录状态，如果已登录，则直接放行
        Long employee = (Long) request.getSession().getAttribute("employee");
        if (employee!=null){
            BaseContext.setId(employee);
            filterChain.doFilter(request,response);
            return;
        }
//        E. 如果未登录, 则返回未登录结果
        response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));

    }
}
